/*

 TipoProductoControlador
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Logistica.Controlador;

import CharliesCookies.MainController;
import com.dp1.pucp.Modelo.Clases.*;
import com.dp1.pucp.Logistica.DAO.*;
import com.dp1.pucp.Logistica.Vista.*;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Util.Validaciones;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author ubuntu64
 */
public class TipoProductoControlador {

    private TipoProductoDAO m;
    private TipoProductoGUI TipoProductoView;
    private Tipoproducto producto;
    private ArrayList<String> lstTipo;
    private ArrayList<String> lstUnidades;
    private MantTipoProductoControlador mantTipoProductoControlador;
    private final static int ESTADO_ACTIVO = 1;

    public TipoProductoControlador(TipoProductoDAO dao, TipoProductoGUI view, MantTipoProductoControlador buc, Tipoproducto tipoproducto) {
        m = dao;
        TipoProductoView = view;
        mantTipoProductoControlador = buc;
        llenarTipoCombo();
        llenarTipoUnidades();
        producto = tipoproducto;
        TipoProductoView.setFormUsuario(tipoproducto);

        TipoProductoView.addCancelarListener(new cancelarListener());
        TipoProductoView.addGuardarListener(new guardarTipoProductoListener());

    }

    private void llenarTipoCombo() {
        lstTipo = m.listarTipoAlmacen();
        TipoProductoView.llenaComboEstado(lstTipo);
    }

    private void llenarTipoUnidades() {
        lstUnidades = m.listarUnidades();
        TipoProductoView.llenaComboUnidades(lstUnidades);
    }

    class guardarTipoProductoListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            Tipoproducto a = new Tipoproducto();

            String nombre = TipoProductoView.getNombre();
            String minPolitica = (TipoProductoView.getMinPolitica());
            String maxPolitica = (TipoProductoView.getMaxPolitica());
            String descripcion = TipoProductoView.getDescripcion();
            int tipo = TipoProductoView.getTipo();
            String factorV = (TipoProductoView.getFactorV());

            String tipoProducto = "";
            if (tipo == 0) {
                tipoProducto = "MP";
            }
            if (tipo == 1) {
                tipoProducto = "PI";
            }
            if (tipo == 2) {
                tipoProducto = "PF";
            }


            boolean nombreFlag = false;
            boolean minPolFlag = false;
            boolean maxFlag = false;
            boolean descFlag = false;
            boolean tipoFlag = false;
            boolean factorVolFlag = false;

            if (nombre.equals("")) {
                nombreFlag = true;
            }

            if (minPolitica.equals("")) {
                minPolFlag = true;
            }

            if (maxPolitica.equals("")) {
                maxFlag = true;
            }

            if (descripcion.equals("")) {
                descFlag = true;
            }

            //if(tipo==0) tipoFlag=true;

            //if(tipo=="0") tipoFlag=true;

            if (factorV.equals("")) {
                factorVolFlag = true;
            }

            if (nombreFlag || minPolFlag || maxFlag || descFlag || tipoFlag || factorVolFlag) {
                Validaciones.mostrarMensajeErrorVal("Ingrese los campos correctamente");
                return;
            }



            //a.setIdtipoproducto(TipoProductoView.tipoproducto.getIdtipoproducto());
            a.setNombre(nombre);
            a.setMinPolitica(Long.parseLong(minPolitica));
            a.setMaxPolitica(Long.parseLong(maxPolitica));
            a.setDescripcion(descripcion);
            a.setTipo(tipoProducto);
            a.setFactorVol(Float.valueOf(factorV));
            a.setEstado(ESTADO_ACTIVO);



            String unidades = null;
            int unid = TipoProductoView.getUnidades();
            if (unid == 0) {
                unidades = "Kilogramos";
            }
            if (unid == 1) {
                unidades = "Litros";
            }
            if (unid == 2) {
                unidades = "Unidades";
            }
            //if(unid==3) unidades="";
            //if(unid==2) unidades="";

            a.setUnidades(unidades);



//            if (usr!=null) {TipoProductoView.mostrarAviso("Se modificó el usuario con éxito");}
//            else { TipoProductoView.mostrarAviso("Se registró el usuario con éxito");}
            if (producto != null) {
                a.setIdtipoproducto(producto.getIdtipoproducto());
                LogDAO.insertarLog(MainController.usuario, "Editar Tipo de Producto");

            } else {
                LogDAO.insertarLog(MainController.usuario, "Agregar Tipo de Producto");
            }

            m.guardarTipoProducto(a);

            //Si es del tipo materia prima se va a guardar una linea en la tabla MateriaPrima

            if (lstTipo.get(TipoProductoView.getTipo()).equals("Materia Prima")) {

                Almacen almacen = m.getAlmacen("MP");

                Materiaprima mp = new Materiaprima();
                mp.setTipoproducto(a);
                mp.setCodigo("codigo");
                mp.setEstado(1);
                mp.setVolumen(Float.parseFloat(String.valueOf(0)));
                mp.setFechaCaducidad(new Date());

                mp.setCantidad(0);
                mp.setAlmacen(almacen);

                m.guardarMP(mp);
            }
            //Si es del tipo product final se va a guardar una linea en la tabla ProductoFinal
            if (lstTipo.get(TipoProductoView.getTipo()).equals("Producto Final")) {

                Almacen almacen = m.getAlmacen("PF");

                ArrayList<Presentacion> presentaciones = m.getPresentaciones();

                for (int i = 0; i < presentaciones.size(); i++) {
                    Presentacion p = presentaciones.get(i);

                    Productofinal pf = new Productofinal();
                    pf.setTipoproducto(a);
                    pf.setDescripcion("descripcion");
                    pf.setCodigo("codigo");
                    pf.setEstado(1);
                    pf.setFechaCaducidad(new Date());
                    pf.setLote("lote");
                    pf.setPresentacion(p);
                    pf.setCantidad(Float.parseFloat(String.valueOf(0)));
                    pf.setAlmacen(almacen);

                    m.guardarPF(pf);

                }


            }

            TipoProductoView.mostrarAviso("Se guardo exitosamente el producto");

            mantTipoProductoControlador.listarResultados(0, "");
            TipoProductoView.dispose();
        }
    }

    class cancelarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (producto != null) {
                LogDAO.insertarLog(MainController.usuario, "Salir Editar Tipo de Producto");
            } else {
                LogDAO.insertarLog(MainController.usuario, "Salir Agregar Tipo de Producto");
            }
            TipoProductoView.dispose();
        }
    }
}
